#include "TransTable.h"

/*
 *--------------------------------------------------------------------------------------
 *       Class:  TransTable
 *      Method:  TransTable
 * Description:  Constrói a partir de um stream
 *--------------------------------------------------------------------------------------
 */
TransTable::TransTable(istream &in)
{
    size = 0;
    uint i = 0;
    char m;

    // Lê todos os bytes do arquivo e os colocam na tabela
    in.read(&m, 1);
    do
    {
        // Adiciona na tabela
        table[i] += m;
        size++;

        i = (i + 1) % KEY_SIZE;

        // Lê um byte
        in.read(&m, 1);
    }
    while(!in.eof());

    div = size / KEY_SIZE;
    left = size - div * KEY_SIZE;
}

/*
 *--------------------------------------------------------------------------------------
 *       Class:  TransTable
 *      Method:  TransTable
 * Description:  Constrói a partir de uma string
 *--------------------------------------------------------------------------------------
 */
TransTable::TransTable(string &in, Key &key)
{
    size = in.length();
    div = size / KEY_SIZE;
    left = size - div * KEY_SIZE;

    uint count = 0;

    // Para cada coluna
    for(uint i = 0; i < KEY_SIZE; i++)
    {
        // Recupera a coluna que deve ser feita a inserção
        uint k = key.position[i];

        // Adiciona os caracteres da coluna
        uint extra = (k < left) ? 1 : 0;
        for(uint j = 0; j < div + extra; j++)
            table[k] += in[count++];
    }
}

